#include <dt-bindings/input/input.h>
#include "tegra124.dtsi"

/ {
	aliases {
		rtc0 = "/i2c@7000d000/pmic@40";
		rtc1 = "/rtc@7000e000";
		serial0 = &uarta;
	};

	chosen {
		stdout-path = "serial0:115200n8";
	};

	memory {
		reg = <0x0 0x80000000 0x0 0x80000000>;
	};

	host1x@50000000 {
		hdmi@54280000 {
			status = "okay";

			vdd-supply = <&vdd_3v3_hdmi>;
			pll-supply = <&vdd_hdmi_pll>;
			hdmi-supply = <&vdd_5v0_hdmi>;

			nvidia,ddc-i2c-bus = <&hdmi_ddc>;
			nvidia,hpd-gpio =
				<&gpio TEGRA_GPIO(N, 7) GPIO_ACTIVE_HIGH>;
		};

		sor@54540000 {
			status = "okay";

			nvidia,dpaux = <&dpaux>;
			nvidia,panel = <&panel>;
		};

		dpaux@545c0000 {
			vdd-supply = <&vdd_3v3_panel>;
			status = "okay";
		};
	};

	serial@70006000 {
		/* Debug connector on the bottom of the board near SD card. */
		status = "okay";
	};

	pwm@7000a000 {
		status = "okay";
	};

	i2c@7000c000 {
		status = "okay";
		clock-frequency = <100000>;

		acodec: audio-codec@10 {
			compatible = "maxim,max98090";
			reg = <0x10>;
			interrupt-parent = <&gpio>;
			interrupts = <TEGRA_GPIO(H, 4) GPIO_ACTIVE_HIGH>;
		};

		temperature-sensor@4c {
			compatible = "ti,tmp451";
			reg = <0x4c>;
			interrupt-parent = <&gpio>;
			interrupts = <TEGRA_GPIO(I, 6) IRQ_TYPE_LEVEL_LOW>;

			#thermal-sensor-cells = <1>;
		};
	};

	i2c@7000c400 {
		status = "okay";
		clock-frequency = <100000>;

		trackpad@15 {
			compatible = "elan,ekth3000";
			reg = <0x15>;
			interrupt-parent = <&gpio>;
			interrupts = <TEGRA_GPIO(W, 3) IRQ_TYPE_EDGE_FALLING>;
			wakeup-source;
		};
	};

	i2c@7000c500 {
		status = "okay";
		clock-frequency = <400000>;

		tpm@20 {
			compatible = "infineon,slb9645tt";
			reg = <0x20>;
		};
	};

	hdmi_ddc: i2c@7000c700 {
		status = "okay";
		clock-frequency = <100000>;
	};

	i2c@7000d000 {
		status = "okay";
		clock-frequency = <400000>;

		pmic: pmic@40 {
			compatible = "ams,as3722";
			reg = <0x40>;
			interrupts = <0 86 IRQ_TYPE_LEVEL_HIGH>;

			ams,system-power-controller;

			#interrupt-cells = <2>;
			interrupt-controller;

			gpio-controller;
			#gpio-cells = <2>;

			pinctrl-names = "default";
			pinctrl-0 = <&as3722_default>;

			as3722_default: pinmux {
				gpio0 {
					pins = "gpio0";
					function = "gpio";
					bias-pull-down;
				};

				gpio1 {
					pins = "gpio1";
					function = "gpio";
					bias-pull-up;
				};

				gpio2_4_7 {
					pins = "gpio2", "gpio4", "gpio7";
					function = "gpio";
					bias-pull-up;
				};

				gpio3_6 {
					pins = "gpio3", "gpio6";
					bias-high-impedance;
				};

				gpio5 {
					pins = "gpio5";
					function = "clk32k-out";
					bias-pull-down;
				};
			};

			regulators {
				vsup-sd2-supply = <&vdd_5v0_sys>;
				vsup-sd3-supply = <&vdd_5v0_sys>;
				vsup-sd4-supply = <&vdd_5v0_sys>;
				vsup-sd5-supply = <&vdd_5v0_sys>;
				vin-ldo0-supply = <&vdd_1v35_lp0>;
				vin-ldo1-6-supply = <&vdd_3v3_run>;
				vin-ldo2-5-7-supply = <&vddio_1v8>;
				vin-ldo3-4-supply = <&vdd_3v3_sys>;
				vin-ldo9-10-supply = <&vdd_5v0_sys>;
				vin-ldo11-supply = <&vdd_3v3_run>;

				vdd_cpu: sd0 {
					regulator-name = "+VDD_CPU_AP";
					regulator-min-microvolt = <700000>;
					regulator-max-microvolt = <1350000>;
					regulator-min-microamp = <3500000>;
					regulator-max-microamp = <3500000>;
					regulator-always-on;
					regulator-boot-on;
					ams,ext-control = <2>;
				};

				sd1 {
					regulator-name = "+VDD_CORE";
					regulator-min-microvolt = <700000>;
					regulator-max-microvolt = <1350000>;
					regulator-min-microamp = <2500000>;
					regulator-max-microamp = <4000000>;
					regulator-always-on;
					regulator-boot-on;
					ams,ext-control = <1>;
				};

				vdd_1v35_lp0: sd2 {
					regulator-name = "+1.35V_LP0(sd2)";
					regulator-min-microvolt = <1350000>;
					regulator-max-microvolt = <1350000>;
					regulator-always-on;
					regulator-boot-on;
				};

				sd3 {
					regulator-name = "+1.35V_LP0(sd3)";
					regulator-min-microvolt = <1350000>;
					regulator-max-microvolt = <1350000>;
					regulator-always-on;
					regulator-boot-on;
				};

				vdd_1v05_run: sd4 {
					regulator-name = "+1.05V_RUN";
					regulator-min-microvolt = <1050000>;
					regulator-max-microvolt = <1050000>;
				};

				vddio_1v8: sd5 {
					regulator-name = "+1.8V_VDDIO";
					regulator-min-microvolt = <1800000>;
					regulator-max-microvolt = <1800000>;
					regulator-always-on;
				};

				sd6 {
					regulator-name = "+VDD_GPU_AP";
					regulator-min-microvolt = <650000>;
					regulator-max-microvolt = <1200000>;
					regulator-min-microamp = <3500000>;
					regulator-max-microamp = <3500000>;
					regulator-boot-on;
					regulator-always-on;
				};

				avdd_1v05_run: ldo0 {
					regulator-name = "+1.05V_RUN_AVDD";
					regulator-min-microvolt = <1050000>;
					regulator-max-microvolt = <1050000>;
					regulator-boot-on;
					regulator-always-on;
					ams,ext-control = <1>;
				};

				ldo1 {
					regulator-name = "+1.8V_RUN_CAM";
					regulator-min-microvolt = <1800000>;
					regulator-max-microvolt = <1800000>;
				};

				ldo2 {
					regulator-name = "+1.2V_GEN_AVDD";
					regulator-min-microvolt = <1200000>;
					regulator-max-microvolt = <1200000>;
					regulator-boot-on;
					regulator-always-on;
				};

				ldo3 {
					regulator-name = "+1.00V_LP0_VDD_RTC";
					regulator-min-microvolt = <1000000>;
					regulator-max-microvolt = <1000000>;
					regulator-boot-on;
					regulator-always-on;
					ams,enable-tracking;
				};

				vdd_run_cam: ldo4 {
					regulator-name = "+3.3V_RUN_CAM";
					regulator-min-microvolt = <2800000>;
					regulator-max-microvolt = <2800000>;
				};

				ldo5 {
					regulator-name = "+1.2V_RUN_CAM_FRONT";
					regulator-min-microvolt = <1200000>;
					regulator-max-microvolt = <1200000>;
				};

				vddio_sdmmc3: ldo6 {
					regulator-name = "+VDDIO_SDMMC3";
					regulator-min-microvolt = <1800000>;
					regulator-max-microvolt = <3300000>;
				};

				ldo7 {
					regulator-name = "+1.05V_RUN_CAM_REAR";
					regulator-min-microvolt = <1050000>;
					regulator-max-microvolt = <1050000>;
				};

				ldo9 {
					regulator-name = "+2.8V_RUN_TOUCH";
					regulator-min-microvolt = <2800000>;
					regulator-max-microvolt = <2800000>;
				};

				ldo10 {
					regulator-name = "+2.8V_RUN_CAM_AF";
					regulator-min-microvolt = <2800000>;
					regulator-max-microvolt = <2800000>;
				};

				ldo11 {
					regulator-name = "+1.8V_RUN_VPP_FUSE";
					regulator-min-microvolt = <1800000>;
					regulator-max-microvolt = <1800000>;
				};
			};
		};
	};

	spi@7000d400 {
		status = "okay";

		cros_ec: cros-ec@0 {
			compatible = "google,cros-ec-spi";
			spi-max-frequency = <3000000>;
			interrupt-parent = <&gpio>;
			interrupts = <TEGRA_GPIO(C, 7) IRQ_TYPE_LEVEL_LOW>;
			reg = <0>;

			google,cros-ec-spi-msg-delay = <2000>;

			i2c-tunnel {
				compatible = "google,cros-ec-i2c-tunnel";
				#address-cells = <1>;
				#size-cells = <0>;

				google,remote-bus = <0>;

				charger: bq24735@9 {
					compatible = "ti,bq24735";
					reg = <0x9>;
					interrupt-parent = <&gpio>;
					interrupts = <TEGRA_GPIO(J, 0)
							GPIO_ACTIVE_HIGH>;
					ti,ac-detect-gpios = <&gpio
							TEGRA_GPIO(J, 0)
							GPIO_ACTIVE_HIGH>;
				};

				battery: sbs-battery@b {
					compatible = "sbs,sbs-battery";
					reg = <0xb>;
					sbs,i2c-retry-count = <2>;
					sbs,poll-retry-count = <10>;
					power-supplies = <&charger>;
				};
			};
		};
	};

	spi@7000da00 {
		status = "okay";
		spi-max-frequency = <25000000>;

		flash@0 {
			compatible = "winbond,w25q32dw";
			spi-max-frequency = <25000000>;
			reg = <0>;
		};
	};

	pmc@7000e400 {
		nvidia,invert-interrupt;
		nvidia,suspend-mode = <0>;
		nvidia,cpu-pwr-good-time = <500>;
		nvidia,cpu-pwr-off-time = <300>;
		nvidia,core-pwr-good-time = <641 3845>;
		nvidia,core-pwr-off-time = <61036>;
		nvidia,core-power-req-active-high;
		nvidia,sys-clock-req-active-high;
	};

	hda@70030000 {
		status = "okay";
	};

	usb@70090000 {
		phys = <&{/padctl@7009f000/pads/usb2/lanes/usb2-0}>, /* 1st USB A */
		       <&{/padctl@7009f000/pads/usb2/lanes/usb2-1}>, /* Internal USB */
		       <&{/padctl@7009f000/pads/usb2/lanes/usb2-2}>, /* 2nd USB A */
		       <&{/padctl@7009f000/pads/pcie/lanes/pcie-0}>, /* 1st USB A */
		       <&{/padctl@7009f000/pads/pcie/lanes/pcie-1}>; /* 2nd USB A */
		phy-names = "usb2-0", "usb2-1", "usb2-2", "usb3-0", "usb3-1";

		avddio-pex-supply = <&vdd_1v05_run>;
		dvddio-pex-supply = <&vdd_1v05_run>;
		avdd-usb-supply = <&vdd_3v3_lp0>;
		avdd-pll-utmip-supply = <&vddio_1v8>;
		avdd-pll-erefe-supply = <&avdd_1v05_run>;
		avdd-usb-ss-pll-supply = <&vdd_1v05_run>;
		hvdd-usb-ss-supply = <&vdd_3v3_lp0>;
		hvdd-usb-ss-pll-e-supply = <&vdd_3v3_lp0>;

		status = "okay";
	};

	padctl@7009f000 {
		status = "okay";

		pads {
			usb2 {
				status = "okay";

				lanes {
					usb2-0 {
						nvidia,function = "xusb";
						status = "okay";
					};

					usb2-1 {
						nvidia,function = "xusb";
						status = "okay";
					};

					usb2-2 {
						nvidia,function = "xusb";
						status = "okay";
					};
				};
			};

			pcie {
				status = "okay";

				lanes {
					pcie-0 {
						nvidia,function = "usb3-ss";
						status = "okay";
					};

					pcie-1 {
						nvidia,function = "usb3-ss";
						status = "okay";
					};
				};
			};
		};

		ports {
			usb2-0 {
				vbus-supply = <&vdd_usb1_vbus>;
				status = "okay";
				mode = "otg";
			};

			usb2-1 {
				vbus-supply = <&vdd_run_cam>;
				status = "okay";
				mode = "host";
			};

			usb2-2 {
				vbus-supply = <&vdd_usb3_vbus>;
				status = "okay";
				mode = "host";
			};

			usb3-0 {
				nvidia,usb2-companion = <0>;
				status = "okay";
			};

			usb3-1 {
				nvidia,usb2-companion = <1>;
				status = "okay";
			};
		};
	};

	sdhci0_pwrseq: sdhci0_pwrseq {
		compatible = "mmc-pwrseq-simple";

		reset-gpios = <&gpio TEGRA_GPIO(X, 7) GPIO_ACTIVE_LOW>;
	};

	sdhci@700b0000 { /* WiFi/BT on this bus */
		status = "okay";
		bus-width = <4>;
		no-1-8-v;
		non-removable;
		mmc-pwrseq = <&sdhci0_pwrseq>;
		vmmc-supply = <&vdd_3v3_lp0>;
		vqmmc-supply = <&vddio_1v8>;
		keep-power-in-suspend;
	};

	sdhci@700b0400 { /* SD Card on this bus */
		status = "okay";
		cd-gpios = <&gpio TEGRA_GPIO(V, 2) GPIO_ACTIVE_LOW>;
		power-gpios = <&gpio TEGRA_GPIO(R, 0) GPIO_ACTIVE_HIGH>;
		bus-width = <4>;
		no-1-8-v;
		vqmmc-supply = <&vddio_sdmmc3>;
	};

	sdhci@700b0600 { /* eMMC on this bus */
		status = "okay";
		bus-width = <8>;
		no-1-8-v;
		non-removable;
	};

	/* CPU DFLL clock */
	clock@70110000 {
		status = "disabled";
		vdd-cpu-supply = <&vdd_cpu>;
		nvidia,i2c-fs-rate = <400000>;
	};

	ahub@70300000 {
		i2s@70301100 {
			status = "okay";
		};
	};

	backlight: backlight {
		compatible = "pwm-backlight";

		enable-gpios = <&gpio TEGRA_GPIO(H, 2) GPIO_ACTIVE_HIGH>;
		power-supply = <&vdd_led>;
		pwms = <&pwm 1 1000000>;

		default-brightness-level = <224>;
		brightness-levels =
			<  0   1   2   3   4   5   6   7
			   8   9  10  11  12  13  14  15
			  16  17  18  19  20  21  22  23
			  24  25  26  27  28  29  30  31
			  32  33  34  35  36  37  38  39
			  40  41  42  43  44  45  46  47
			  48  49  50  51  52  53  54  55
			  56  57  58  59  60  61  62  63
			  64  65  66  67  68  69  70  71
			  72  73  74  75  76  77  78  79
			  80  81  82  83  84  85  86  87
			  88  89  90  91  92  93  94  95
			  96  97  98  99 100 101 102 103
			 104 105 106 107 108 109 110 111
			 112 113 114 115 116 117 118 119
			 120 121 122 123 124 125 126 127
			 128 129 130 131 132 133 134 135
			 136 137 138 139 140 141 142 143
			 144 145 146 147 148 149 150 151
			 152 153 154 155 156 157 158 159
			 160 161 162 163 164 165 166 167
			 168 169 170 171 172 173 174 175
			 176 177 178 179 180 181 182 183
			 184 185 186 187 188 189 190 191
			 192 193 194 195 196 197 198 199
			 200 201 202 203 204 205 206 207
			 208 209 210 211 212 213 214 215
			 216 217 218 219 220 221 222 223
			 224 225 226 227 228 229 230 231
			 232 233 234 235 236 237 238 239
			 240 241 242 243 244 245 246 247
			 248 249 250 251 252 253 254 255
			 256>;
	};

	clocks {
		compatible = "simple-bus";
		#address-cells = <1>;
		#size-cells = <0>;

		clk32k_in: clock@0 {
			compatible = "fixed-clock";
			reg = <0>;
			#clock-cells = <0>;
			clock-frequency = <32768>;
		};
	};

	cpus {
		cpu@0 {
			vdd-cpu-supply = <&vdd_cpu>;
		};
	};

	gpio-keys {
		compatible = "gpio-keys";

		lid {
			label = "Lid";
			gpios = <&gpio TEGRA_GPIO(R, 4) GPIO_ACTIVE_LOW>;
			linux,input-type = <5>;
			linux,code = <KEY_RESERVED>;
			debounce-interval = <1>;
			wakeup-source;
		};

		power {
			label = "Power";
			gpios = <&gpio TEGRA_GPIO(Q, 0) GPIO_ACTIVE_LOW>;
			linux,code = <KEY_POWER>;
			debounce-interval = <30>;
			wakeup-source;
		};
	};

	regulators {
		compatible = "simple-bus";
		#address-cells = <1>;
		#size-cells = <0>;

		vdd_mux: regulator@0 {
			compatible = "regulator-fixed";
			reg = <0>;
			regulator-name = "+VDD_MUX";
			regulator-min-microvolt = <12000000>;
			regulator-max-microvolt = <12000000>;
			regulator-always-on;
			regulator-boot-on;
		};

		vdd_5v0_sys: regulator@1 {
			compatible = "regulator-fixed";
			reg = <1>;
			regulator-name = "+5V_SYS";
			regulator-min-microvolt = <5000000>;
			regulator-max-microvolt = <5000000>;
			regulator-always-on;
			regulator-boot-on;
			vin-supply = <&vdd_mux>;
		};

		vdd_3v3_sys: regulator@2 {
			compatible = "regulator-fixed";
			reg = <2>;
			regulator-name = "+3.3V_SYS";
			regulator-min-microvolt = <3300000>;
			regulator-max-microvolt = <3300000>;
			regulator-always-on;
			regulator-boot-on;
			vin-supply = <&vdd_mux>;
		};

		vdd_3v3_run: regulator@3 {
			compatible = "regulator-fixed";
			reg = <3>;
			regulator-name = "+3.3V_RUN";
			regulator-min-microvolt = <3300000>;
			regulator-max-microvolt = <3300000>;
			regulator-always-on;
			regulator-boot-on;
			gpio = <&pmic 1 GPIO_ACTIVE_HIGH>;
			enable-active-high;
			vin-supply = <&vdd_3v3_sys>;
		};

		vdd_3v3_hdmi: regulator@4 {
			compatible = "regulator-fixed";
			reg = <4>;
			regulator-name = "+3.3V_AVDD_HDMI_AP_GATED";
			regulator-min-microvolt = <3300000>;
			regulator-max-microvolt = <3300000>;
			vin-supply = <&vdd_3v3_run>;
		};

		vdd_led: regulator@5 {
			compatible = "regulator-fixed";
			reg = <5>;
			regulator-name = "+VDD_LED";
			gpio = <&gpio TEGRA_GPIO(P, 2) GPIO_ACTIVE_HIGH>;
			enable-active-high;
			vin-supply = <&vdd_mux>;
		};

		vdd_5v0_ts: regulator@6 {
			compatible = "regulator-fixed";
			reg = <6>;
			regulator-name = "+5V_VDD_TS_SW";
			regulator-min-microvolt = <5000000>;
			regulator-max-microvolt = <5000000>;
			regulator-boot-on;
			gpio = <&gpio TEGRA_GPIO(K, 1) GPIO_ACTIVE_HIGH>;
			enable-active-high;
			vin-supply = <&vdd_5v0_sys>;
		};

		vdd_usb1_vbus: regulator@7 {
			compatible = "regulator-fixed";
			reg = <7>;
			regulator-name = "+5V_USB_HS";
			regulator-min-microvolt = <5000000>;
			regulator-max-microvolt = <5000000>;
			gpio = <&gpio TEGRA_GPIO(N, 4) GPIO_ACTIVE_HIGH>;
			enable-active-high;
			gpio-open-drain;
			vin-supply = <&vdd_5v0_sys>;
		};

		vdd_usb3_vbus: regulator@8 {
			compatible = "regulator-fixed";
			reg = <8>;
			regulator-name = "+5V_USB_SS";
			regulator-min-microvolt = <5000000>;
			regulator-max-microvolt = <5000000>;
			gpio = <&gpio TEGRA_GPIO(N, 5) GPIO_ACTIVE_HIGH>;
			enable-active-high;
			gpio-open-drain;
			vin-supply = <&vdd_5v0_sys>;
		};

		vdd_3v3_panel: regulator@9 {
			compatible = "regulator-fixed";
			reg = <9>;
			regulator-name = "+3.3V_PANEL";
			regulator-min-microvolt = <3300000>;
			regulator-max-microvolt = <3300000>;
			gpio = <&pmic 4 GPIO_ACTIVE_HIGH>;
			enable-active-high;
			vin-supply = <&vdd_3v3_run>;
		};

		vdd_3v3_lp0: regulator@10 {
			compatible = "regulator-fixed";
			reg = <10>;
			regulator-name = "+3.3V_LP0";
			regulator-min-microvolt = <3300000>;
			regulator-max-microvolt = <3300000>;
			/*
			 * TODO: find a way to wire this up with the USB EHCI
			 * controllers so that it can be enabled on demand.
			 */
			regulator-always-on;
			gpio = <&pmic 2 GPIO_ACTIVE_HIGH>;
			enable-active-high;
			vin-supply = <&vdd_3v3_sys>;
		};

		vdd_hdmi_pll: regulator@11 {
			compatible = "regulator-fixed";
			reg = <11>;
			regulator-name = "+1.05V_RUN_AVDD_HDMI_PLL";
			regulator-min-microvolt = <1050000>;
			regulator-max-microvolt = <1050000>;
			gpio = <&gpio TEGRA_GPIO(H, 7) GPIO_ACTIVE_LOW>;
			vin-supply = <&vdd_1v05_run>;
		};

		vdd_5v0_hdmi: regulator@12 {
			compatible = "regulator-fixed";
			reg = <12>;
			regulator-name = "+5V_HDMI_CON";
			regulator-min-microvolt = <5000000>;
			regulator-max-microvolt = <5000000>;
			gpio = <&gpio TEGRA_GPIO(K, 6) GPIO_ACTIVE_HIGH>;
			enable-active-high;
			vin-supply = <&vdd_5v0_sys>;
		};
	};

	sound {
		nvidia,audio-routing =
			"Headphones", "HPR",
			"Headphones", "HPL",
			"Speakers", "SPKR",
			"Speakers", "SPKL",
			"Mic Jack", "MICBIAS",
			"DMICL", "Int Mic",
			"DMICR", "Int Mic",
			"IN34", "Mic Jack";

		nvidia,i2s-controller = <&tegra_i2s1>;
		nvidia,audio-codec = <&acodec>;

		clocks = <&tegra_car TEGRA124_CLK_PLL_A>,
			 <&tegra_car TEGRA124_CLK_PLL_A_OUT0>,
			 <&tegra_car TEGRA124_CLK_EXTERN1>;
		clock-names = "pll_a", "pll_a_out0", "mclk";

		nvidia,hp-det-gpios = <&gpio TEGRA_GPIO(I, 7) GPIO_ACTIVE_HIGH>;
		nvidia,mic-det-gpios =
				<&gpio TEGRA_GPIO(R, 7) GPIO_ACTIVE_HIGH>;
	};

	gpio-restart {
		compatible = "gpio-restart";
		gpios = <&gpio TEGRA_GPIO(I, 5) GPIO_ACTIVE_LOW>;
		priority = <200>;
	};
};

#include "cros-ec-keyboard.dtsi"
